<?php

/*
 * Copyright (c) 2011 Joao Paulo Cirino Silva de Novais <joaopaulonovais@gmail.com>
 *
 */

class EscolaControl extends Control {
    /*
     * Esse metodo responsavel por orquestrar as acoes das classes de visao
     * e dados.
     */

    static function executar() {

    	//Objetos que representam os dados (VO)
        $escola        = new EscolaModel();
        $escolaPerfil  = new EscolaPerfilModel();
        $escolaContato = new EscolaContatoModel();
    	    	
    	//Recuperacao dos valores via $_REQUEST
        $acao = isset($_REQUEST["acao"]) ? $_REQUEST["acao"] : "";
        $tela = isset($_REQUEST["tela"]) ? $_REQUEST["tela"] : "";
        
        if ($_SESSION["cod_escola"]){
            $cod_escola = $_SESSION["cod_escola"];
        } elseif ($_REQUEST["cod_escola"]) {
            $cod_escola = $_REQUEST["cod_escola"]; 
        } else {
        	$cod_escola = $escola->get("cod_escola");
        }

        //Escola
        $escola->set("cod_escola"      , $cod_escola);
        $escola->set("nom_escola"      ,isset($_REQUEST["nom_escola"])       ? $_REQUEST["nom_escola"]       : $_SESSION["nom_escola"]);
        $escola->set("nom_razao_social",isset($_REQUEST["nom_razao_social"]) ? $_REQUEST["nom_razao_social"] : $_SESSION["nom_razao_social"]);
        $escola->set("num_cnpj"        ,isset($_REQUEST["num_cnpj"])         ? $_REQUEST["num_cnpj"]         : $_SESSION["num_cnpj"]);
        $escola->set("des_endereco"    ,isset($_REQUEST["des_endereco"])     ? $_REQUEST["des_endereco"]     : $_SESSION["des_endereco"]);
        $escola->set("des_cidade"      ,isset($_REQUEST["des_cidade"])       ? $_REQUEST["des_cidade"]       : $_SESSION["des_cidade"]);
        $escola->set("des_bairro"      ,isset($_REQUEST["des_bairro"])       ? $_REQUEST["des_bairro"]       : $_SESSION["des_bairro"]);
        $escola->set("sig_uf"          ,isset($_REQUEST["sig_uf"])           ? $_REQUEST["sig_uf"]           : $_SESSION["sig_uf"]);
        $escola->set("cep_escola"      ,isset($_REQUEST["cep_escola"])       ? $_REQUEST["cep_escola"]       : $_SESSION["cep_escola"]);
        $escola->set("txt_observacao"  ,isset($_REQUEST["txt_observacao"])   ? $_REQUEST["txt_observacao"]   : $_SESSION["txt_observacao"]);
        //Perfil da Escola
        $escolaPerfil->set("cod_escola"     ,$cod_escola);
        $escolaPerfil->set("cod_tipo_perfil",isset($_REQUEST["cod_tipo_perfil"]) ? $_REQUEST["cod_tipo_perfil"] : "");
        $escolaPerfil->set("des_observacao" ,isset($_REQUEST["obs_perfil"])      ? $_REQUEST["obs_perfil"] : "");
        //Contato da Escola
        $escolaContato->set("cod_escola"      ,$cod_escola);
        $escolaContato->set("cod_tipo_contato",isset($_REQUEST["cod_tipo_contato"]) ? $_REQUEST["cod_tipo_contato"] : "");
        $escolaContato->set("des_contato"     ,isset($_REQUEST["des_contato"])      ? $_REQUEST["des_contato"] : "");
        $escolaContato->set("des_observacao"  ,isset($_REQUEST["obs_contato"])      ? $_REQUEST["obs_contato"] : "");
        
        //Objeto para manipular a interface
    	$visao = new EscolaView($tela);
    	//Consulta os perfis para apresentacao das opcoes em tela
        $tipoPerfil = TipoPerfilDAO::consultar(new TipoPerfilModel);
    	//Envia os dados consultados para a interface
        $visao->setTipoPerfil($tipoPerfil);
        //Nao ha estas informacoes na consulta, somente no cadastro
        if ($tela == "Cadastro") {
            //Consulta os perfis para apresentacao das opcoes em tela
            $tipoContato = TipoContatoDAO::consultar(new TipoContatoModel);
            $visao->setTipoContato($tipoContato);
        } else {
        	if ($_SESSION["cod_escola"]){
                session_destroy();
        	}
        }
  
        //Nao sera possivel utilizar o load, pois faz-se necessario instanciar mais de um objeto: $escola, $escolaPerfil e $escolaContato
        //Dessa forma nao podemos atribuir todos os dados do $_REQUEST a um mesmo objetos (ha tres cadastos na tela)    
        //self::load($escola, $_REQUEST);
        switch ($acao) {

            case "Gravar":
            	
                if ($escola->get("cod_escola")) {
                	EscolaDAO::alterar($escola);
                    $visao->setMensagem("Escola alterada com sucesso!");
                } else {
                	$id = EscolaDAO::inserir($escola);
                	$escola->set("cod_escola", $id);
                	//O codigo da escola e enviado para sessão para facilitar a recuperacao nas consultas
                	$_SESSION["cod_escola"]       =  $id;
                	//Os demais sao enviados para manter os dados do pai na tela
                	$_SESSION["nom_escola"]       =  $escola->get("nom_escola");
                	$_SESSION["nom_razao_social"] =  $escola->get("nom_razao_social");
                	$_SESSION["num_cnpj"]         =  $escola->get("num_cnpj");
                	$_SESSION["des_endereco"]     =  $escola->get("des_endereco");
                	$_SESSION["des_cidade"]       =  $escola->get("des_cidade");
                	$_SESSION["des_bairro"]       =  $escola->get("des_bairro");
                	$_SESSION["sig_uf"]           =  $escola->get("sig_uf");
                	$_SESSION["cep_escola"]       =  $escola->get("cep_escola");
                	$_SESSION["txt_observacao"]   =  $escola->get("txt_observacao");

                	$visao->setMensagem("Escola cadastrada com sucesso!");
                }
                $visao->editar($escola);

                break;
                
            case "+Perfil": //Inclusao de perfil

                $registros = EscolaPerfilDAO::consultarPorPerfil($escolaPerfil);

                if ($registros) {
            		EscolaPerfilDAO::alterar($escolaPerfil);
            	} else {
            		EscolaPerfilDAO::inserir($escolaPerfil);
            	}
            	
            	$visao->setMensagem("Perfil gravado com sucesso!");
                $registros = EscolaPerfilDAO::consultar($escolaPerfil);
                $visao->listarPerfil($registros, $escola);
            	
                break;
                
            case "xPerfil": //Alteracao de perfil

            	//So retorna um registro por causa da chave primaria
            	$registros = EscolaPerfilDAO::consultarPorPerfil($escolaPerfil);
            	$visao->editarPerfil($registros[0], $escola);
            	
            	break;
                
            case "-Perfil": //Exclusao de perfil
            	
                EscolaPerfilDAO::remover($escolaPerfil);
                $visao->setMensagem("Perfil removido com sucesso!");
                $registros = EscolaPerfilDAO::consultar($escolaPerfil);
                $visao->listarPerfil($registros, $escola);
                
                break;
                
            case "+Contato": //Inclusao de contato

                $registros = EscolaContatoDAO::consultarPorContato($escolaContato);

                if ($registros) {
            		EscolaContatoDAO::alterar($escolaContato);
            	} else {
            		EscolaContatoDAO::inserir($escolaContato);
            	}
            	
            	$visao->setMensagem("Contato gravado com sucesso!");
                $registros = EscolaContatoDAO::consultar($escolaContato);
                $visao->listarContato($registros, $escola);
            	
                break;
                
            case "xContato": //Alteracao de contato
     	
                //So retorna um registro por causa da chave primaria
             	$registros = EscolaContatoDAO::consultarPorContato($escolaContato);
            	$visao->editarContato($registros[0], $escola);
            	
            	break;

            case "-Contato": //Exclusao de contato
            	
                EscolaContatoDAO::remover($escolaContato);
                $visao->setMensagem("Contato removido com sucesso!");
                $registros = EscolaContatoDAO::consultar($escolaContato);
                $visao->listarContato($registros, $escola);

                break;
                
            case "Consultar":

            	//Ao consultar as escolas pelo perfil, monta-se array com as opcoes selecionadas
                $perfis = isset($_REQUEST["opt_perfil"]) ? $_REQUEST["opt_perfil"] : "";
                //A relacao de perfis e adcionada ao array com os dados da escola
                $escola->set("perfis", $perfis);
            	
                try {

                    $registros = EscolaDAO::consultar($escola);
                    
                    if ($registros) {
                    	
                        $visao->consultar($registros);
                    } else {
                    	
                        $visao->consultar(new EscolaModel());
                    }
                } catch (PDOException $e) {
                	
                    echo $e->getMessage();
                }

                break;
                
            case "Visualizar":
            	
                try {

                    $escola   = EscolaDAO::consultar($escola);
                    $perfis   = EscolaPerfilDAO::consultar($escolaPerfil);
                    $contatos = EscolaContatoDAO::consultar($escolaContato);
                  
                    if ($escola) {
                        $visao->visualizar($escola[0], $perfis, $contatos);
                    } else {
                        $visao->visualizar(null);
                    }
                } catch (PDOException $e) {
                	
                    echo $e->getMessage();
                }

                break;
                             
            default: // $acao == "Editar"
            	
            	if ($tela == "Cadastro") {

	                if ($escola->get("cod_escola")) {
	                	
	                    try {
	                    	
	                    	$registros = EscolaDAO::consultar($escola);
	                    	
	                        if ($registros) {
	                        	
	                            $escola = $registros[0];
	                        }
	                    } catch (PDOException $e) {
	                    	
	                        echo $e->getMessage();
	                    }
	                } else {
	                	
	                    $escola = new EscolaModel();
	                }
	                
	                $visao->editar($escola);
            	} else {
            		$visao->consultar(null);
            	}
        }
    }
}

?>